package com.im.tcp.register;

import com.lld.im.common.constants.Constants;
import org.I0Itec.zkclient.ZkClient;

/**
 * ZK工具包 初始化一些zookeeper的节点信息
 *
 * 节点 是zookeeper中的一种树形数据结构 用户存储数据信息 分为持久/临时节点
 * 创建节点 其实也就是客户端将自身信息注册到zookeeper的一个结果 这也就是为啥会使用ip+端口的形式
 */
public class ZKKit {

    /* ZkClient是对原生zookeeper的封装  */
    private ZkClient zkClient;

    private String brokerId;

    public ZKKit(ZkClient zkClient, String brokerId) {
        this.zkClient = zkClient;
        this.brokerId = brokerId;
    }


    //im-zookeeper/tcp(webSocket)/ip/port
    public void createRootNode() {
        if (!zkClient.exists(Constants.ImCoreZkRoot)) {
            //创建一个持久化节点
            zkClient.createPersistent(Constants.ImCoreZkRoot);
        }

        if (!zkClient.exists(Constants.ImCoreZkRoot + Constants.ImCoreZkRootTcp)) {
            zkClient.createPersistent(Constants.ImCoreZkRoot + Constants.ImCoreZkRootTcp);
        }

        if (!zkClient.exists(Constants.ImCoreZkRoot + Constants.ImCoreZkRootWeb)) {
            zkClient.createPersistent(Constants.ImCoreZkRoot + Constants.ImCoreZkRootWeb);
        }
    }

    /**
     * 根据path创建指定节点
     *
     * @param path
     */
    public void createNode(String path) {
        if (!zkClient.exists(path))
            zkClient.createPersistent(path);
    }

}
